/*
 * Copyright (c) 2012, the Dart project authors.
 * 
 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.dart.tools.core.completion;

import org.eclipse.core.runtime.IProgressMonitor;

import java.security.Signature;

/**
 * Instances of the class <code>CompletionProposal</code> implement a completion proposal.
 * <p>
 * In typical usage, the user working in a Java code editor issues a code assist command. This
 * command results in a call to <code>ICodeAssist.codeComplete(position, completionRequestor)</code>
 * passing the current position in the source code. The code assist engine analyzes the code in the
 * buffer, determines what kind of Java language construct is at that position, and proposes ways to
 * complete that construct. These proposals are instances of the class
 * <code>CompletionProposal</code>. These proposals, perhaps after sorting and filtering, are
 * presented to the user to make a choice.
 * </p>
 * <p>
 * The proposal is as follows: insert the {@linkplain #getCompletion() completion string} into the
 * source file buffer, replacing the characters between {@linkplain #getReplaceStart() the start}
 * and {@linkplain #getReplaceEnd() end}. The string can be arbitrary; for example, it might include
 * not only the name of a method but a set of parentheses. Moreover, the source range may include
 * source positions before or after the source position where <code>ICodeAssist.codeComplete</code>
 * was invoked. The rest of the information associated with the proposal is to provide context that
 * may help a user to choose from among competing proposals.
 * </p>
 * <p>
 * The completion engine creates instances of this class.
 * </p>
 * 
 * @coverage dart.tools.core.completion
 */
public class CompletionProposal {
  /**
   * This character is used to specify location of the cursor after completion.
   */
  public static final char CURSOR_MARKER = 0x2758;

  /**
   * Completion is a declaration of an anonymous class. This kind of completion might occur in a
   * context like <code>"new List(^;"</code> and complete it to <code>"new List() {}"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type being implemented or
   * subclassed</li>
   * <li>{@link #getDeclarationKey()} - the type unique key of the type being implemented or
   * subclassed</li>
   * <li>{@link #getSignature()} - the method signature of the constructor that is referenced</li>
   * <li>{@link #getKey()} - the method unique key of the constructor that is referenced if the
   * declaring type is not an interface</li>
   * <li>{@link #getFlags()} - the modifiers flags of the constructor that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int ANONYMOUS_CLASS_DECLARATION = 1;

  /**
   * Completion is a reference to a field. This kind of completion might occur in a context like
   * <code>"this.ref^ = 0;"</code> and complete it to <code>"this.refcount = 0;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int FIELD_REF = 2;

  /**
   * Completion is a keyword. This kind of completion might occur in a context like
   * <code>"public cl^ Foo {}"</code> and complete it to <code>"public class Foo {}"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getName()} - the keyword token</li>
   * <li>{@link #getFlags()} - the corresponding modifier flags if the keyword is a modifier</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int KEYWORD = 3;

  /**
   * Completion is a reference to a label. This kind of completion might occur in a context like
   * <code>"break lo^;"</code> and complete it to <code>"break loop;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getName()} - the simple name of the label that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int LABEL_REF = 4;

  /**
   * Completion is a reference to a local variable. This kind of completion might occur in a context
   * like <code>"ke^ = 4;"</code> and complete it to <code>"keys = 4;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getFlags()} - the modifiers flags of the local variable that is referenced</li>
   * <li>{@link #getName()} - the simple name of the local variable that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the local variable's type</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int LOCAL_VARIABLE_REF = 5;

  /**
   * Completion is a reference to a method. This kind of completion might occur in a context like
   * <code>"System.out.pr^();"</code> and complete it to <code>""System.out.println();"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is referenced</li>
   * <li>{@link #getName()} - the simple name of the method that is referenced</li>
   * <li>{@link #getSignature()} - the method signature of the method that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int METHOD_REF = 6;

  /**
   * Completion is a declaration of a method. This kind of completion might occur in a context like
   * <code>"new List() {si^};"</code> and complete it to
   * <code>"new List() {public int size() {} };"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is being overridden or implemented</li>
   * <li>{@link #getDeclarationKey()} - the unique of the type that declares the method that is
   * being overridden or implemented</li>
   * <li>{@link #getName()} - the simple name of the method that is being overridden or implemented</li>
   * <li>{@link #getSignature()} - the method signature of the method that is being overridden or
   * implemented</li>
   * <li>{@link #getKey()} - the method unique key of the method that is being overridden or
   * implemented</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is being overridden or
   * implemented</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int METHOD_DECLARATION = 7;

  /**
   * Completion is a reference to a package. This kind of completion might occur in a context like
   * <code>"import java.u^.*;"</code> and complete it to <code>"import java.util.*;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the dot-based package name of the package that is
   * referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int LIBRARY_PREFIX = 8;

  /**
   * Completion is a reference to a type. Any kind of type is allowed, including primitive types,
   * reference types, array types, parameterized types, and type variables. This kind of completion
   * might occur in a context like <code>"public static Str^ key;"</code> and complete it to
   * <code>"public static String key;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the dot-based package name of the package that
   * contains the type that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the type that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including Flags.AccInterface, AccEnum, and
   * AccAnnotation) of the type that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int TYPE_REF = 9;

  /**
   * Completion is a declaration of a variable (locals, parameters, fields, etc.).
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getName()} - the simple name of the variable being declared</li>
   * <li>{@link #getSignature()} - the type signature of the type of the variable being declared</li>
   * <li>{@link #getFlags()} - the modifiers flags of the variable being declared</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int VARIABLE_DECLARATION = 10;

  /**
   * Completion is a declaration of a new potential method. This kind of completion might occur in a
   * context like <code>"new List() {si^};"</code> and complete it to
   * <code>"new List() {public int si() {} };"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is being created</li>
   * <li>{@link #getName()} - the simple name of the method that is being created</li>
   * <li>{@link #getSignature()} - the method signature of the method that is being created</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is being created</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int POTENTIAL_METHOD_DECLARATION = 11;

  /**
   * Completion is a reference to a method name. This kind of completion might occur in a context
   * like <code>"import p.X.fo^"</code> and complete it to <code>"import p.X.foo;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is referenced</li>
   * <li>{@link #getName()} - the simple name of the method that is referenced</li>
   * <li>{@link #getSignature()} - the method signature of the method that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int METHOD_NAME_REFERENCE = 12;

  /**
   * Completion is a reference to annotation's attribute. This kind of completion might occur in a
   * context like <code>"@Annot(attr^=value)"</code> and complete it to
   * <code>"@Annot(attribute^=value)"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the annotation that declares the
   * attribute that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the attribute that is referenced</li>
   * <li>{@link #getName()} - the simple name of the attribute that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the attribute's type (as opposed to the
   * signature of the type in which the referenced attribute is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int ANNOTATION_ATTRIBUTE_REF = 13;

  /**
   * Completion is a link reference to a field in a javadoc text. This kind of completion might
   * occur in a context like <code>"  * blabla System.o^ blabla"</code> and complete it to
   * <code>"  * blabla {&#64;link System#out } blabla"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_FIELD_REF = 14;

  /**
   * Completion is a link reference to a method in a javadoc text. This kind of completion might
   * occur in a context like <code>"  * blabla Runtime#get^ blabla"</code> and complete it to
   * <code>"  * blabla {&#64;link Runtime#getRuntime() }"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is referenced</li>
   * <li>{@link #getName()} - the simple name of the method that is referenced</li>
   * <li>{@link #getSignature()} - the method signature of the method that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_METHOD_REF = 15;

  /**
   * Completion is a link reference to a type in a javadoc text. Any kind of type is allowed,
   * including primitive types, reference types, array types, parameterized types, and type
   * variables. This kind of completion might occur in a context like
   * <code>"  * blabla Str^ blabla"</code> and complete it to
   * <code>"  * blabla {&#64;link String } blabla"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the dot-based package name of the package that
   * contains the type that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the type that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including Flags.AccInterface, AccEnum, and
   * AccAnnotation) of the type that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_TYPE_REF = 16;

  /**
   * Completion is a value reference to a static field in a javadoc text. This kind of completion
   * might occur in a context like <code>"  * blabla System.o^ blabla"</code> and complete it to
   * <code>"  * blabla {&#64;value System#out } blabla"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_VALUE_REF = 17;

  /**
   * Completion is a method argument or a class/method type parameter in javadoc param tag. This
   * kind of completion might occur in a context like <code>"  * @param arg^ blabla"</code> and
   * complete it to <code>"  * @param argument blabla"</code>. or
   * <code>"  * @param &lt;T^ blabla"</code> and complete it to
   * <code>"  * @param &lt;TT&gt; blabla"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_PARAM_REF = 18;

  /**
   * Completion is a javadoc block tag. This kind of completion might occur in a context like
   * <code>"  * @s^ blabla"</code> and complete it to <code>"  * @see blabla"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_BLOCK_TAG = 19;

  /**
   * Completion is a javadoc inline tag. This kind of completion might occur in a context like
   * <code>"  * Insert @l^ Object"</code> and complete it to
   * <code>"  * Insert {&#64;link Object }"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int JAVADOC_INLINE_TAG = 20;

  /**
   * Completion is an import of reference to a static field.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is imported</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * imported</li>
   * <li>{@link #getName()} - the simple name of the field that is imported</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * <li>{@link #getAdditionalFlags()} - the completion flags (including
   * ComletionFlags.StaticImport) of the proposed import</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int FIELD_IMPORT = 21;

  /**
   * Completion is an import of reference to a static method.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is imported</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is imported</li>
   * <li>{@link #getName()} - the simple name of the method that is imported</li>
   * <li>{@link #getSignature()} - the method signature of the method that is imported</li>
   * <li>{@link #getAdditionalFlags()} - the completion flags (including
   * ComletionFlags.StaticImport) of the proposed import</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int METHOD_IMPORT = 22;

  /**
   * Completion is an import of reference to a type. Only reference to reference types are allowed.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the dot-based package name of the package that
   * contains the type that is imported</li>
   * <li>{@link #getSignature()} - the type signature of the type that is imported</li>
   * <li>{@link #getFlags()} - the modifiers flags (including Flags.AccInterface, AccEnum, and
   * AccAnnotation) of the type that is imported</li>
   * <li>{@link #getAdditionalFlags()} - the completion flags (including
   * ComletionFlags.StaticImport) of the proposed import</li>
   * </ul>
   * 
   * @see #getKind()
   */
  public static final int TYPE_IMPORT = 23;

  /**
   * Completion is a reference to a method with a casted receiver. This kind of completion might
   * occur in a context like <code>"receiver.fo^();"</code> and complete it to
   * <code>""((X)receiver).foo();"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * method that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the method that is referenced</li>
   * <li>{@link #getName()} - the simple name of the method that is referenced</li>
   * <li>{@link #getReceiverSignature()} - the type signature of the receiver type. It's the type of
   * the cast expression.</li>
   * <li>{@link #getSignature()} - the method signature of the method that is referenced</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int METHOD_REF_WITH_CASTED_RECEIVER = 24;

  /**
   * Completion is a reference to a field with a casted receiver. This kind of completion might
   * occur in a context like <code>"recevier.ref^ = 0;"</code> and complete it to
   * <code>"((X)receiver).refcount = 0;"</code>.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the field
   * that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags (including ACC_ENUM) of the field that is
   * referenced</li>
   * <li>{@link #getName()} - the simple name of the field that is referenced</li>
   * <li>{@link #getReceiverSignature()} - the type signature of the receiver type. It's the type of
   * the cast expression.</li>
   * <li>{@link #getSignature()} - the type signature of the field's type (as opposed to the
   * signature of the type in which the referenced field is declared)</li>
   * </ul>
   * 
   * @see #getKind()
   */
  @Deprecated
  public static final int FIELD_REF_WITH_CASTED_RECEIVER = 25;

  /**
   * Completion is a reference to a constructor. This kind of completion might occur in a context
   * like <code>"new Lis"</code> and complete it to <code>"new List();"</code> if List is a class
   * that is not abstract.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type that declares the
   * constructor that is referenced</li>
   * <li>{@link #getFlags()} - the modifiers flags of the constructor that is referenced</li>
   * <li>{@link #getName()} - the simple name of the constructor that is referenced</li>
   * <li>{@link #getSignature()} - the method signature of the constructor that is referenced</li>
   * </ul>
   * <p>
   * This kind of proposal could require a long computation, so they are computed only if completion
   * operation is called with a {@link IProgressMonitor} (e.g.
   * {@link ICodeAssist#codeComplete(int, CompletionRequestor, IProgressMonitor)} ).<br>
   * This kind of proposal is always is only proposals with a {@link #TYPE_REF} required proposal,
   * so this kind of required proposal must be allowed:
   * <code>requestor.setAllowsRequiredProposals(CONSTRUCTOR_INVOCATION, TYPE_REF, true)</code>.
   * 
   * @see #getKind()
   * @see CompletionRequestor#setAllowsRequiredProposals(int, int, boolean)
   */
  public static final int CONSTRUCTOR_INVOCATION = 26;

  /**
   * Completion is a reference of a constructor of an anonymous class. This kind of completion might
   * occur in a context like <code>"new Lis^;"</code> and complete it to
   * <code>"new List() {}"</code> if List is an interface or abstract class.
   * <p>
   * The following additional context information is available for this kind of completion proposal
   * at little extra cost:
   * <ul>
   * <li>{@link #getDeclarationSignature()} - the type signature of the type being implemented or
   * subclassed</li>
   * <li>{@link #getDeclarationKey()} - the type unique key of the type being implemented or
   * subclassed</li>
   * <li>{@link #getSignature()} - the method signature of the constructor that is referenced</li>
   * <li>{@link #getKey()} - the method unique key of the constructor that is referenced if the
   * declaring type is not an interface</li>
   * <li>{@link #getFlags()} - the modifiers flags of the constructor that is referenced</li>
   * </ul>
   * <p>
   * This kind of proposal could require a long computation, so they are computed only if completion
   * operation is called with a {@link IProgressMonitor} (e.g.
   * {@link ICodeAssist#codeComplete(int, CompletionRequestor, IProgressMonitor)} )<br>
   * This kind of proposal is always is only proposals with a {@link #TYPE_REF} required proposal,
   * so this kind of required proposal must be allowed:
   * <code>requestor.setAllowsRequiredProposals(CONSTRUCTOR_INVOCATION, TYPE_REF, true)</code>.
   * 
   * @see #getKind()
   * @see CompletionRequestor#setAllowsRequiredProposals(int, int, boolean)
   */
  @Deprecated
  public static final int ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION = 27;

  public static final int ARGUMENT_LIST = 28;

  public static final int OPTIONAL_ARGUMENT = 29;

  public static final int NAMED_ARGUMENT = 30;

  /**
   * First valid completion kind.
   */
  protected static final int FIRST_KIND = ANONYMOUS_CLASS_DECLARATION;

  /**
   * Last valid completion kind.
   */
  protected static final int LAST_KIND = NAMED_ARGUMENT;

  /**
   * Creates a basic completion proposal. All instance field have plausible default values unless
   * otherwise noted.
   * <p>
   * Note that the constructors for this class are internal to the Java model implementation.
   * Clients cannot directly create CompletionProposal objects.
   * 
   * @param kind one of the kind constants declared on this class
   * @param completionOffset original offset of code completion request
   * @return a new completion proposal
   */
  public static CompletionProposal create(int kind, int completionOffset) {
    return null;
  }

  public void applyPartitionOffset(int partitionOffset) {
  }

  /**
   * Finds the method parameter names. This information is relevant to method reference (and method
   * declaration proposals). Returns <code>null</code> if not available or not relevant.
   * <p>
   * The client must not modify the array returned.
   * <p>
   * <b>Note that this is an expensive thing to compute, which may require parsing Java source
   * files, etc. Use sparingly.</b>
   * 
   * @param monitor the progress monitor, or <code>null</code> if none
   * @return the parameter names, or <code>null</code> if none or not available or not relevant
   */
  public char[][] findParameterNames(IProgressMonitor monitor) {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the accessibility of the proposal.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>TYPE_REF</code> - accessibility of the type</li>
   * </ul>
   * For these kinds of completion proposals, this method returns {@link IAccessRule#K_ACCESSIBLE}
   * or {@link IAccessRule#K_DISCOURAGED} or {@link IAccessRule#K_NON_ACCESSIBLE}. By default this
   * method return {@link IAccessRule#K_ACCESSIBLE}.
   * 
   * @see IAccessRule
   * @return the accessibility of the proposal
   */
  public int getAccessibility() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the completion flags relevant in the context, or <code>CompletionFlags.Default</code> if
   * none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>FIELD_IMPORT</code> - completion flags of the attribute that is referenced.
   * Completion flags for this proposal kind can only include
   * <code>CompletionFlags.StaticImport</code></li>
   * <li><code>METHOD_IMPORT</code> - completion flags of the attribute that is referenced.
   * Completion flags for this proposal kind can only include
   * <code>CompletionFlags.StaticImport</code></li>
   * <li><code>TYPE_IMPORT</code> - completion flags of the attribute that is referenced. Completion
   * flags for this proposal kind can only include <code>CompletionFlags.StaticImport</code></li>
   * </ul>
   * For other kinds of completion proposals, this method returns
   * <code>CompletionFlags.Default</code>.
   * 
   * @return the completion flags, or <code>CompletionFlags.Default</code> if none
   * @see CompletionFlags
   */
  public int getAdditionalFlags() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the proposed sequence of characters to insert into the source file buffer, replacing the
   * characters at the specified source range. The string can be arbitrary; for example, it might
   * include not only the name of a method but a set of parentheses.
   * <p>
   * The client must not modify the array returned.
   * 
   * @return the completion string
   */
  public char[] getCompletion() {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the character index in the source file buffer where source completion was requested (the
   * <code>offset</code> parameter to <code>ICodeAssist.codeComplete</code> minus one).
   * 
   * @return character index in source file buffer
   * @see ICodeAssist#codeComplete(int,CompletionRequestor)
   */
  // TODO (david) https://bugs.eclipse.org/bugs/show_bug.cgi?id=132558
  public int getCompletionLocation() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the key of the relevant declaration in the context, or <code>null</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - key of the type that is being subclassed or
   * implemented</li>
   * <li><code>METHOD_DECLARATION</code> - key of the type that declares the method that is being
   * implemented or overridden</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return a key, or <code>null</code> if none
   * @see org.eclipse.jdt.core.dom.ASTParser#createASTs(ICompilationUnit[], String[],
   *      org.eclipse.jdt.core.dom.ASTRequestor, IProgressMonitor)
   */
  public char[] getDeclarationKey() {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the type signature or package name of the relevant declaration in the context, or
   * <code>null</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANNOTATION_ATTRIBUT_REF</code> - type signature of the annotation that declares the
   * attribute that is referenced</li>
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - type signature of the type that is being
   * subclassed or implemented</li>
   * <li><code>FIELD_IMPORT</code> - type signature of the type that declares the field that is
   * imported</li>
   * <li><code>FIELD_REF</code> - type signature of the type that declares the field that is
   * referenced</li>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code> - type signature of the type that declares the
   * field that is referenced</li>
   * <li><code>METHOD_IMPORT</code> - type signature of the type that declares the method that is
   * imported</li>
   * <li><code>METHOD_REF</code> - type signature of the type that declares the method that is
   * referenced</li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code> - type signature of the type that declares the
   * method that is referenced</li>
   * <li><code>METHOD_DECLARATION</code> - type signature of the type that declares the method that
   * is being implemented or overridden</li>
   * <li><code>PACKAGE_REF</code> - dot-based package name of the package that is referenced</li>
   * <li><code>TYPE_IMPORT</code> - dot-based package name of the package containing the type that
   * is imported</li>
   * <li><code>TYPE_REF</code> - dot-based package name of the package containing the type that is
   * referenced</li>
   * <li><code>POTENTIAL_METHOD_DECLARATION</code> - type signature of the type that declares the
   * method that is being created</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return a type signature or a package name (depending on the kind of completion), or
   *         <code>null</code> if none
   * @see Signature
   */
  public char[] getDeclarationSignature() {
    return null; // default overridden by concrete implementation
  }

  public String getElementDocDetails() {
    return null;
  }

  public String getElementDocSummary() {
    return null;
  }

  /**
   * Return the modifier flags relevant in the context, or <code>Flags.AccDefault</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANNOTATION_ATTRIBUT_REF</code> - modifier flags of the attribute that is referenced;
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - modifier flags of the constructor that is
   * referenced</li>
   * <li><code>FIELD_IMPORT</code> - modifier flags of the field that is imported.</li>
   * <li><code>FIELD_REF</code> - modifier flags of the field that is referenced;
   * <code>Flags.AccEnum</code> can be used to recognize references to enum constants</li>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code> - modifier flags of the field that is
   * referenced.</li>
   * <li><code>KEYWORD</code> - modifier flag corresponding to the modifier keyword</li>
   * <li><code>LOCAL_VARIABLE_REF</code> - modifier flags of the local variable that is referenced</li>
   * <li><code>METHOD_IMPORT</code> - modifier flags of the method that is imported;</li>
   * <li><code>METHOD_REF</code> - modifier flags of the method that is referenced;
   * <code>Flags.AccAnnotation</code> can be used to recognize references to annotation type members
   * </li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code> - modifier flags of the method that is
   * referenced.</li>
   * <li><code>METHOD_DECLARATION</code> - modifier flags for the method that is being implemented
   * or overridden</li>
   * <li><code>TYPE_IMPORT</code> - modifier flags of the type that is imported;
   * <code>Flags.AccInterface</code> can be used to recognize references to interfaces,
   * <code>Flags.AccEnum</code> enum types, and <code>Flags.AccAnnotation</code> annotation types</li>
   * <li><code>TYPE_REF</code> - modifier flags of the type that is referenced;
   * <code>Flags.AccInterface</code> can be used to recognize references to interfaces,
   * <code>Flags.AccEnum</code> enum types, and <code>Flags.AccAnnotation</code> annotation types</li>
   * <li><code>VARIABLE_DECLARATION</code> - modifier flags for the variable being declared</li>
   * <li><code>POTENTIAL_METHOD_DECLARATION</code> - modifier flags for the method that is being
   * created</li>
   * </ul>
   * For other kinds of completion proposals, this method returns <code>Flags.AccDefault</code>.
   * 
   * @return the modifier flags, or <code>Flags.AccDefault</code> if none
   * @see Flagsx
   * @deprecated
   */
  @Deprecated
  public int getFlags() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the key relevant in the context, or <code>null</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - method key of the constructor that is being
   * invoked, or <code>null</code> if the declaring type is an interface</li>
   * <li><code>METHOD_DECLARATION</code> - method key of the method that is being implemented or
   * overridden</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return the key, or <code>null</code> if none
   * @see org.eclipse.jdt.core.dom.ASTParser#createASTs(ICompilationUnit[], String[],
   *      org.eclipse.jdt.core.dom.ASTRequestor, IProgressMonitor)
   */
  public char[] getKey() {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the kind of completion being proposed.
   * <p>
   * The set of different kinds of completion proposals is expected to change over time. It is
   * strongly recommended that clients do <b>not</b> assume that the kind is one of the ones they
   * know about, and code defensively for the possibility of unexpected future growth.
   * 
   * @return the kind; one of the kind constants declared on this class, or possibly a kind unknown
   *         to the caller
   */
  public int getKind() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the simple name of the method, field, member, or variable relevant in the context, or
   * <code>null</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANNOTATION_ATTRIBUT_REF</code> - the name of the attribute</li>
   * <li><code>FIELD_IMPORT</code> - the name of the field</li>
   * <li><code>FIELD_REF</code> - the name of the field</li>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code> - the name of the field</li>
   * <li><code>KEYWORD</code> - the keyword</li>
   * <li><code>LABEL_REF</code> - the name of the label</li>
   * <li><code>LOCAL_VARIABLE_REF</code> - the name of the local variable</li>
   * <li><code>METHOD_IMPORT</code> - the name of the method</li>
   * <li><code>METHOD_REF</code> - the name of the method (the type simple name for constructor)</li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code> - the name of the method</li>
   * <li><code>METHOD_DECLARATION</code> - the name of the method (the type simple name for
   * constructor)</li>
   * <li><code>VARIABLE_DECLARATION</code> - the name of the variable</li>
   * <li><code>POTENTIAL_METHOD_DECLARATION</code> - the name of the method</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return the keyword, field, method, local variable, or member name, or <code>null</code> if
   *         none
   */
  public char[] getName() {
    return null; // default overridden by concrete implementation
  }

  public String getParameterName() {
    return null;
  }

  public char[][] getParameterNames() {
    return null;
  }

  public String getParameterType() {
    return null;
  }

  public char[][] getParameterTypeNames() {
    return null;
  }

  public int getPositionalParameterCount() {
    return 0;
  }

  /**
   * Return the character index of the end (exclusive) of the subrange in the source file buffer
   * containing the relevant receiver of the member being completed.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code></li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code></li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>0</code>.
   * 
   * @return character index of receiver end position (exclusive)
   */
  public int getReceiverEnd() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the type signature or package name of the relevant receiver in the context, or
   * <code>null</code> if none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code> - type signature of the type that cast the
   * receiver of the field that is referenced</li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code> - type signature of the type that cast the
   * receiver of the method that is referenced</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return a type signature or a package name (depending on the kind of completion), or
   *         <code>null</code> if none
   * @see Signature
   */
  public char[] getReceiverSignature() {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the start of the subrange in the source file buffer containing
   * the relevant receiver of the member being completed. This receiver is an expression.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code></li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code></li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>0</code>.
   * 
   * @return character index of receiver start position (inclusive)
   */
  public int getReceiverStart() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the relative relevance rating of this proposal.
   * 
   * @return relevance rating of this proposal; ratings are positive; higher means better
   */
  public int getRelevance() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the end of the subrange in the source file buffer to be replaced
   * by the completion string. If the subrange is empty (
   * <code>getReplaceEnd() == getReplaceStart()</code>), the completion string is to be inserted at
   * this index.
   * 
   * @return replacement end position (exclusive)
   */
  public int getReplaceEnd() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the end of the subrange in the source file buffer to be replaced
   * by the completion string with <code>Ctrl+Enter</code>. If the subrange is empty (
   * <code>getReplaceEnd2() == getReplaceStart()</code>), the completion string is to be inserted at
   * this index.
   * 
   * @return replacement end position (exclusive)
   */
  public int getReplaceEndIdentifier() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the start of the subrange in the source file buffer to be
   * replaced by the completion string. If the subrange is empty (
   * <code>getReplaceEnd() == getReplaceStart()</code>), the completion string is to be inserted at
   * this index.
   * <p>
   * Note that while the token subrange is precisely specified, the replacement range is loosely
   * constrained and may not bear any direct relation to the original request offset. For example,
   * it would be possible for a type completion to propose inserting an import declaration at the
   * top of the compilation unit; or the completion might include trailing parentheses and
   * punctuation for a method completion.
   * 
   * @return replacement start position (inclusive)
   */
  public int getReplaceStart() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the required completion proposals. The proposal can be apply only if these required
   * completion proposals are also applied. If the required proposal aren't applied the completion
   * could create completion problems.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>FIELD_REF</code> - The allowed required proposals for this kind are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * <li><code>TYPE_IMPORT</code></li>
   * <li><code>FIELD_IMPORT</code></li>
   * </ul>
   * </li>
   * <li><code>METHOD_REF</code> - The allowed required proposals for this kind are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * <li><code>TYPE_IMPORT</code></li>
   * <li><code>METHOD_IMPORT</code></li>
   * </ul>
   * </li> </li>
   * <li><code>TYPE_REF</code> - The allowed required proposals for this kind are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * </ul>
   * </li>
   * <li><code>CONSTRUCTOR_INVOCATION</code> - The allowed required proposals for this kind are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * </ul>
   * </li>
   * <li><code>ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION</code> - The allowed required proposals for
   * this kind are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * </ul>
   * </li>
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - The allowed required proposals for this kind
   * are:
   * <ul>
   * <li><code>TYPE_REF</code></li>
   * </ul>
   * </li>
   * </ul>
   * </p>
   * <p>
   * Other kinds of required proposals will be returned in the future, therefore clients of this API
   * must allow with {@link CompletionRequestor#setAllowsRequiredProposals(int, int, boolean)} only
   * kinds which are in this list to avoid unexpected results in the future.
   * <p>
   * A required proposal of a given kind is proposed even if
   * {@link CompletionRequestor#isIgnored(int)} return <code>true</code> for that kind.
   * <p>
   * A required completion proposal cannot have required completion proposals.
   * 
   * @return the required completion proposals, or <code>null</code> if none.
   * @see CompletionRequestor#setAllowsRequiredProposals(int, int,boolean)
   */
  public CompletionProposal[] getRequiredProposals() {
    return null; // default overridden by concrete implementation
  }

  public char[] getReturnTypeName() {
    return null;
  }

  /**
   * Return the signature of the method or type relevant in the context, or <code>null</code> if
   * none.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>ANNOTATION_ATTRIBUT_REF</code> - the type signature of the referenced attribute's
   * type</li>
   * <li><code>ANONYMOUS_CLASS_DECLARATION</code> - method signature of the constructor that is
   * being invoked</li>
   * <li><code>FIELD_IMPORT</code> - the type signature of the referenced field's type</li>
   * <li><code>FIELD_REF</code> - the type signature of the referenced field's type</li>
   * <li><code>FIELD_REF_WITH_CASTED_RECEIVER</code> - the type signature of the referenced field's
   * type</li>
   * <li><code>LOCAL_VARIABLE_REF</code> - the type signature of the referenced local variable's
   * type</li>
   * <li><code>METHOD_IMPORT</code> - method signature of the method that is imported</li>
   * <li><code>METHOD_REF</code> - method signature of the method that is referenced</li>
   * <li><code>METHOD_REF_WITH_CASTED_RECEIVER</code> - method signature of the method that is
   * referenced</li>
   * <li><code>METHOD_DECLARATION</code> - method signature of the method that is being implemented
   * or overridden</li>
   * <li><code>TYPE_IMPORT</code> - type signature of the type that is imported</li>
   * <li><code>TYPE_REF</code> - type signature of the type that is referenced</li>
   * <li><code>VARIABLE_DECLARATION</code> - the type signature of the type of the variable being
   * declared</li>
   * <li><code>POTENTIAL_METHOD_DECLARATION</code> - method signature of the method that is being
   * created</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>null</code>. Clients must not
   * modify the array returned.
   * 
   * @return the signature, or <code>null</code> if none
   * @see Signature
   */
  public char[] getSignature() {
    return null; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the end (exclusive) of the subrange in the source file buffer
   * containing the relevant token. When there is no relevant token, the range is empty (
   * <code>getEndToken() == getStartToken()</code>).
   * 
   * @return character index of token end position (exclusive)
   */
  public int getTokenEnd() {
    return -1; // default overridden by concrete implementation
  }

  /**
   * Return the character index of the start of the subrange in the source file buffer containing
   * the relevant token being completed. This token is either the identifier or Java language
   * keyword under, or immediately preceding, the original request offset. If the original request
   * offset is not within or immediately after an identifier or keyword, then the position returned
   * is original request offset and the token range is empty.
   * 
   * @return character index of token start position (inclusive)
   */
  public int getTokenStart() {
    return -1; // default overridden by concrete implementation
  }

  public boolean hasNamedParameters() {
    return false;
  }

  public boolean hasOptionalParameters() {
    return false;
  }

  /**
   * Return <code>true</code> if this proposal is a constructor.
   * <p>
   * This field is available for the following kinds of completion proposals:
   * <ul>
   * <li><code>METHOD_REF</code> - return <code>true</code> if the referenced method is a
   * constructor</li>
   * <li><code>METHOD_DECLARATION</code> - return <code>true</code> if the declared method is a
   * constructor</li>
   * </ul>
   * For kinds of completion proposals, this method returns <code>false</code>.
   * 
   * @return <code>true</code> if the proposal is a constructor.
   */
  public boolean isConstructor() {
    return false; // default overridden by concrete implementation
  }

  public boolean isDeprecated() {
    return false;
  }

  public boolean isGetOrSet() {
    return false;
  }

  public boolean isInterface() {
    return false;
  }

  public boolean isPotentialMatch() {
    return false;
  }

  public boolean isPrivate() {
    return false;
  }

  /**
   * Sets the completion flags relevant in the context.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param additionalFlags the completion flags, or <code>CompletionFlags.Default</code> if none
   */
  public void setAdditionalFlags(int additionalFlags) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the proposed sequence of characters to insert into the source file buffer, replacing the
   * characters at the specified source range. The string can be arbitrary; for example, it might
   * include not only the name of a method but a set of parentheses.
   * <p>
   * If not set, defaults to an empty character array.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param completion the completion string
   */
  public void setCompletion(char[] completion) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the type or package key of the relevant declaration in the context, or <code>null</code>
   * if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param key the type or package key, or <code>null</code> if none
   */
  public void setDeclarationKey(char[] key) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the type or package signature of the relevant declaration in the context, or
   * <code>null</code> if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param signature the type or package signature, or <code>null</code> if none
   */
  public void setDeclarationSignature(char[] signature) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the modifier flags relevant in the context.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param flags the modifier flags, or <code>Flags.AccDefault</code> if none
   * @deprecated
   */
  @Deprecated
  public void setFlags(int flags) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the key of the method, field type, member type, relevant in the context, or
   * <code>null</code> if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param key the key, or <code>null</code> if none
   */
  public void setKey(char[] key) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the simple name of the method (type simple name for constructor), field, member, or
   * variable relevant in the context, or <code>null</code> if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param name the keyword, field, method, local variable, or member name, or <code>null</code> if
   *          none
   */
  public void setName(char[] name) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the method parameter names. This information is relevant to method reference (and method
   * declaration proposals).
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param parameterNames the parameter names, or <code>null</code> if none
   */
  public void setParameterNames(char[][] parameterNames) {
    // default overridden by concrete implementation
  }

  public void setParameterStyle(boolean hasNamed, boolean hasOptional) {
    // default overridden by concrete implementation
  }

  public void setPositionalParameterCount(int c) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the character indices of the subrange in the source file buffer containing the relevant
   * receiver of the member being completed.
   * <p>
   * If not set, defaults to empty subrange at [0,0).
   * 
   * @param startIndex character index of receiver start position (inclusive)
   * @param endIndex character index of receiver end position (exclusive)
   */
  public void setReceiverRange(int startIndex, int endIndex) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the type or package signature of the relevant receiver in the context, or
   * <code>null</code> if none.
   * <p>
   * If not set, defaults to none
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param signature the type or package signature, or <code>null</code> if none
   */
  public void setReceiverSignature(char[] signature) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the relative relevance rating of this proposal.
   * <p>
   * If not set, defaults to the lowest possible rating (1).
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param rating relevance rating of this proposal; ratings are positive; higher means better
   */
  public void setRelevance(int rating) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the character indices of the subrange in the source file buffer to be replaced by the
   * completion string. If the subrange is empty ( <code>startIndex == endIndex</code>), the
   * completion string is to be inserted at this index.
   * <p>
   * If not set, defaults to empty subrange at [0,0).
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param startIndex character index of replacement start position (inclusive)
   * @param endIndex character index of replacement end position (exclusive)
   */
  public void setReplaceRange(int startIndex, int endIndex) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the list of required completion proposals, or <code>null</code> if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param proposals the list of required completion proposals, or <code>null</code> if none
   */
  public void setRequiredProposals(CompletionProposal[] proposals) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the signature of the method, field type, member type, relevant in the context, or
   * <code>null</code> if none.
   * <p>
   * If not set, defaults to none.
   * <p>
   * The completion engine creates instances of this class and sets its properties; this method is
   * not intended to be used by other clients.
   * 
   * @param signature the signature, or <code>null</code> if none
   */
  public void setSignature(char[] signature) {
    // default overridden by concrete implementation
  }

  /**
   * Sets the character indices of the subrange in the source file buffer containing the relevant
   * token being completed. This token is either the identifier or Java language keyword under, or
   * immediately preceding, the original request offset. If the original request offset is not
   * within or immediately after an identifier or keyword, then the source range begins at original
   * request offset and is empty.
   * <p>
   * If not set, defaults to empty subrange at [0,0).
   * 
   * @param startIndex character index of token start position (inclusive)
   * @param endIndex character index of token end position (exclusive)
   */
  public void setTokenRange(int startIndex, int endIndex) {
    // default overridden by concrete implementation
  }
}
